import abiturklassen.netzklassen.*;
import java.util.*;

/**
 * Die Klasse Client ist der Spieler, der sich am Server anmeldet.
 * Die Klasse wurde von Tobi ab dem 08.01.15 geschrieben.
 */
public class CAHClient extends abiturklassen.netzklassen.Client {
    public ArrayList<String> karten;
    public ArrayList<String> antworten;
    public String dieFrage;
    public int frageInt;
    public boolean binJury;
    public boolean updateKarten = false;
    public boolean updateAntwort = false;
    public boolean updateFrage = false;
    public boolean updateSieg = false;
    public PunkteSystem p;
    public int punkteBenoetigt;
    int online=0 ;
    public ArrayList<String> gewinner; //alle Gewinner aller Runden

    public CAHClient(/**String pServerIP, */int pServerPort) {
        super(/**pServerIP*/"localhost", pServerPort);
        p = new PunkteSystem();
        binJury = false;
        punkteBenoetigt = 0;
        karten = new ArrayList<String>();
        antworten = new ArrayList<String>();
        gewinner = new ArrayList<String>();
        System.out.println("-------------------------\n"+"DIES IST DAS AUSGABEFENSTER DES CLIENTS");
    }
    public CAHClient(String pServerIP, int pServerPort) throws java.net.UnknownHostException
    {
            
            super(pServerIP, pServerPort);
        
        
        p = new PunkteSystem();
        binJury = false;
        punkteBenoetigt = 0;
        karten = new ArrayList<String>();
        antworten = new ArrayList<String>();
        gewinner = new ArrayList<String>();
        System.out.println("-------------------------\n"+"DIES IST DAS AUSGABEFENSTER DES CLIENTS");
    }

    public void processMessage(String pMessage) {
        boolean ausgeben = true; // ob er noch ausgeben soll
        if (pMessage.startsWith("/nS:")) { //kopmlett neues Spiel
            p.addPlayer(pMessage.substring(4));
            ausgeben = false;
        } else if (pMessage.startsWith("/Si:")) { //es gibt einen neuen Spieler
            gewinner.add(pMessage.substring(4));
            for(int i = 0; i < p.players.size(); i++)
            {
                if(p.players.get(i).getName().equals(pMessage.substring(4)))
                    p.players.get(i).addPoint();
            }
            updateSieg = true;
        }else if (pMessage.startsWith("/nP:")) { //wenn ein Spieler eingetragen wird
            punkteBenoetigt = Integer.parseInt(pMessage.substring(4));
            ausgeben = false;
        } else if (pMessage.startsWith("/iJ:")) { //dieser Client ist die Jury diese Runde
            binJury = true;
            pMessage = pMessage.substring(4);
            ausgeben = true;
        } else if (pMessage.startsWith("/k")) { //man bekommt seine eigenen Karten angezeigt
            if (pMessage.startsWith("/k1:")) {
                karten.add(pMessage.substring(4));
                ausgeben = false;
            } else if (pMessage.startsWith("/k2:")) {
                karten.add(pMessage.substring(4));
                ausgeben = false;
            } else if (pMessage.startsWith("/k3:")) {
                karten.add(pMessage.substring(4));
                ausgeben = false;
            } else if (pMessage.startsWith("/k4:")) {
                karten.add(pMessage.substring(4));
                ausgeben = false;
            } else if (pMessage.startsWith("/k5:")) {
                karten.add(pMessage.substring(4));
                ausgeben = false;
            } else if (pMessage.startsWith("/k6:")) {
                karten.add(pMessage.substring(4));
                ausgeben = false;
                updateKarten = true;
            }
        } else if (pMessage.startsWith("/F")) { //die Frage wird in die Variable eingetragen
            frageInt = Integer.parseInt(pMessage.substring(2,3));
            dieFrage = pMessage.substring(4, pMessage.length());
            ausgeben = false;
            updateFrage = true;

        } else if (pMessage.startsWith("/an:")) { //die Antworten werden in die Varibalen eingetragen
            pMessage = pMessage.substring(4, pMessage.length());
            //die jury soll nicht den Namen der Personen sehen
            if (binJury == true) { //der Jury sieht die Namen nicht
                antworten.add(pMessage.substring(pMessage.indexOf(':')+2,pMessage.length()));
                //antworten.add(pMessage);            
            } else antworten.add(pMessage); //der normale Spieler sieht die Namen
            ausgeben = false;
            if(antworten.size()== p.players.size()-1){
                updateAntwort = true;
            }
        } else if (pMessage.startsWith("/nR:")) { //wenn eine neue Runde beginnt
            pMessage = pMessage.substring(4, pMessage.length());
            zuruecksetzen();
            ausgeben = true;
        }
        else if(pMessage.startsWith("Server: Momentan sind folgende Nutzer online: ")){
             pMessage = pMessage.substring(46, pMessage.length());
             online = pMessage.split(",").length-1;
        }

        //Amin, hier (am Ende dieser Methode) hast du als pMessage die Dinge, die in den Chat geschrieben werden sollen,
        //da sie als Info fuer den SPieler gelten oder eine Nachricht an den Spieler ist
        //if (ausgeben == true) {
            System.out.println(pMessage);
        //}
    }
    public void setzt2(){
        frageInt = 2;
    }
    public void zuruecksetzen() {
        //alle Variablen zuruecksetzen
        binJury = false;
        int frageInt = 0;
        dieFrage = "";
        karten.clear();
        antworten.clear();
    }

    private void sendeNachricht(String pMessage) {
        send(pMessage);
    }

    /**
     * Wenn man nun in einer Lobby ist, kann eine Person das Spiel starten.
     * Die aktuellen Personen, die in der Lobby sind, werden als Spieler dieser Lobby im Spiel selbst automatisch erstellt.
     * Die Anzahl der Punkte, die fuer einen Sieg notwendig sind, werden noch nachgefragt
     */
    public void beginneSpiel(int anzahlPunkteNotwendig) {
        send("/NG:"+anzahlPunkteNotwendig);
    }

    /**
     * nur eine gewuenschte karte auswaehlen
     */
    public void karteWaehlen(int kartennummer) {
        send("/1K:"+(kartennummer-1));
    }

    /**
     * zwei gewuenschte karten auswaehlen
     */
    public void karteWaehlen(int kartennummer1, int kartennummer2) {
        send("/2KN:"+(kartennummer1-1)+(kartennummer2-1));
    }

    /**
     * sollte nur von Jury ausgefuerht werden. Falls doch jdm anderes das macht, wird
     * dieser Person gesagt, dass sies nicht durfte.
     */
    public void wahlGeben(String antwort) {
        send("/KW:"+antwort);
    }

    public void anmelden(String benutzername, String passwort) {
        sendeNachricht("BN:"+benutzername+"/PW:"+passwort);
    }

    public void erstanmeldung(String benutzername, String passwort, String passwort2) {
        sendeNachricht("NBN:"+benutzername+"/NPW:"+passwort+";"+passwort2);
    }

    public void abmelden() {
        sendeNachricht("END");
    }

    public void nachrichtenSenden(String pMessage) {
        sendeNachricht("N:"+pMessage);
    }

    public void aktuelleNutzerLaden() {
        sendeNachricht("/ReloadNutzer");
    }

    public void automatischNeueLobbyErstellen(int pAnzahlSpieler) {
        sendeNachricht("/NL:"+pAnzahlSpieler);
    }

    /**
     * hier die folgende Schreibweise betrachten! benutzername1;benutzername2;benutzername3;...
     * KEINE LEERZEICHEN DAZWISCHEN MACHEN
     * bitte trage dich NICHT noch zusaetzlich ein, da sonst eine Fehlermeldung auftreten wird, die gar kein Fehler ist
     */
    public void manuellNeueLobbyErstellen(String alleNutzerHintereinandergeschrieben) {
        sendeNachricht("/MNL:"+alleNutzerHintereinandergeschrieben+";END");
    }

    public void verlasseLobby() {
        sendeNachricht("VL");
    }

    /**
     * Diese Methode funktioniert (noch) nicht, da es Fehlermeldungen gibt, sobald der Server beendet werden soll.
     */
    public void beendeServer() {
        sendeNachricht("/ENDSERVER");
    }

    public void faSenden(String benutzername) {
        sendeNachricht("FA:"+benutzername);
    }

    public void faBestaetigen(String benutzername) {
        sendeNachricht("FB:"+benutzername);
    }

    public void fLoeschen(String benutzername) {
        sendeNachricht("FL:"+benutzername);
    }

    public String test(String pMessage) {
        return pMessage.substring(pMessage.indexOf(':')+2,pMessage.length());
    }
}